package com.landun.market.service;

import com.landun.market.pojo.domain.AccessToken;
import com.landun.market.pojo.enums.UserType;
import com.landun.market.pojo.model.User;

/**
 * @author jiang.chuan
 * @date 2018-05-11
 */
public interface ISecurityService {
    /**
     * 通过用户名方式登录
     *
     * @param userType   用户类型: {@link UserType#PLATFORM PC端}, {@link UserType#MOBILE 移动端}
     * @param identifier 登录用户名，邮箱或手机
     * @param password   登录密码
     * @return User
     */
    AccessToken login(UserType userType, String identifier, String password, String host);

    /**
     * 退出系统
     *
     * @param token 登录时分配的Token标识
     */
    void logout(String token, String host);

    /**
     * 根据令牌获取用户信息
     *
     * @param token 令牌
     * @return User
     */
    User getUserByToken(String token, String host);

    /**
     * 根据令牌获取用户信息
     *
     * @param token 令牌
     * @param host  请求人的IP
     * @return
     */
    Integer getUserIdByToken(String token, String host);

    /**
     * 验证 AccessToken 是否有效, 并根本配置自动延长 AccessToken 的有效期.
     *
     * @param token 登录时分配的Token标识
     * @return true: token 有效， 否则无效
     */
    boolean isAuthenticated(String token, String host);
}
